package shell

import (
	log "github.com/sirupsen/logrus"
	"os/exec"
)

func ShellFileExec(scriptPath string) {
	cmd := exec.Command("bash", scriptPath)
	output, err := cmd.CombinedOutput()
	if err != nil {
		log.Fatalf("执行 %v 脚本失败: %v\n输出: %s", scriptPath, err, string(output))
	}
	log.Printf("脚本 %v 执行成功 | 输出: %s\n", scriptPath, string(output))
	
	// 流式读取shell输出，暂未验证
	//package shell
	//
	//import (
	//	"bufio"
	//"log"
	//"os/exec"
	//"time"
	//)
	//
	//func ShellFileExec(scriptPath string) {
	//	cmd := exec.Command("bash", scriptPath)
	//
	//	// 创建标准输出和标准错误管道
	//	stdout, err := cmd.StdoutPipe()
	//	if err != nil {
	//		log.Fatalf("创建标准输出管道失败: %v", err)
	//	}
	//
	//	stderr, err := cmd.StderrPipe()
	//	if err != nil {
	//		log.Fatalf("创建标准错误管道失败: %v", err)
	//	}
	//
	//	// 启动命令
	//	if err := cmd.Start(); err != nil {
	//		log.Fatalf("启动命令失败: %v", err)
	//	}
	//
	//	// 使用 goroutine 读取标准输出
	//	go func() {
	//		scanner := bufio.NewScanner(stdout)
	//		for scanner.Scan() {
	//			log.Printf("脚本 %v 输出: %s\n", scriptPath, scanner.Text())
	//		}
	//		if err := scanner.Err(); err != nil {
	//			log.Printf("读取标准输出时出错: %v\n", err)
	//		}
	//	}()
	//
	//	// 使用 goroutine 读取标准错误
	//	go func() {
	//		scanner := bufio.NewScanner(stderr)
	//		for scanner.Scan() {
	//			log.Printf("脚本 %v 错误: %s\n", scriptPath, scanner.Text())
	//		}
	//		if err := scanner.Err(); err != nil {
	//			log.Printf("读取标准错误时出错: %v\n", err)
	//		}
	//	}()
	//
	//	// 等待命令执行完成
	//	if err := cmd.Wait(); err != nil {
	//		log.Fatalf("命令 %v 执行失败: %v", scriptPath, err)
	//	}
	//
	//	log.Printf("脚本 %v 执行成功\n", scriptPath)
	//}

}

func ShellCommandExec(command string) {
	// 使用 exec.Command 直接执行 shell 命令
	cmd := exec.Command("bash", "-c", command)
	output, err := cmd.CombinedOutput()
	if err != nil {
		log.Fatalf("执行 %v 命令失败: %v\n输出: %s", command, err, string(output))
	}
	log.Printf("命令 %v 执行成功 | 输出: %s\n", command, string(output))
}
